/**
 * 获取给定元素的下一个元素，如果currentItem=null则返回第一个元素
 * @param {*} arr 数组对象
 * @param {*} currentItem 指定的元素对象
 * @param {*} keyField 可鉴定唯一元素的 field
 */
export function getNextInObjArray(arr, currentItem, keyField){
  if(!arr) return null;
  const arrObject = Array.from(arr);
  if(cancelAnimationFrame.length <=0) return null;
  if(!currentItem) return arrObject[0];

  for(let i=0;i<arr.length;i++){
    const item = arr[i];
    const itemValue = item[keyField];
    const currentValue = currentItem[keyField];
    if(itemValue === currentValue) {
      return arr[i+1]
    }
  }

  return null;
}

/**
 * 获取给定元素的下一个元素，如果currentItem=null则返回第一个元素
 * @param {*} arr 数组对象
 * @param {*} currentValue 指定的元素对象的字段 keyField 的值
 * @param {*} keyField 可鉴定唯一元素的 field
 */
export function getNextInObjArray8Val(arr, currentValue, keyField){
  if(!arr) return null;
  const arrObject = Array.from(arr);
  if(cancelAnimationFrame.length <=0) return null;
  if(!currentValue) return arrObject[0];

  for(let i=0;i<arr.length;i++){
    if(arr[i][keyField] === currentValue) {
      return arr[i+1]
    }
  }

  return null;
}

/**
 * 获取给定元素的下一个元素，如果currentItem=null则返回第一个元素
 * 如果没有下一个则返回上一个
 * @param {*} arr 数组对象
 * @param {*} currentValue 指定的元素对象的字段 keyField 的值
 * @param {*} keyField 可鉴定唯一元素的 field
 */
export function getBrotherInObjArray8Val(arr, currentValue, keyField){
  if(!arr) return null;
  const arrObject = Array.from(arr);
  if(cancelAnimationFrame.length <=0) return null;
  if(!currentValue) return arrObject[0];

  for(let i=0;i<arr.length;i++){
    if(arr[i][keyField] === currentValue) {
      if( i+1 >= arr.length )
        if( i-1 < 0 )
          return arr[0];
        else
          return arr[i-1];
      else
        return arr[i+1];
    }
  }

  return null;
}

/**
 * 获取对象数组指定字段去重数据构成的数组
 * @param arr 对象构成的数组
 * @param fieldName 对象中的字段
 * @returns {any[]}
 */
export function getDistFieldValArray(arr, fieldName){
  const arr01 = arr.map(item => item[fieldName])
  return Array.from(new Set(arr01))
}

// typeof arr = object
export function getRowIndexInObjArray(arr, fieldName, keyValue){
  if(!arr || arr.length === 0) return -1

  for (let i = 0;i < arr.length; i++) {
    const item = arr[i]
    if(item[fieldName] == keyValue){
      return i
    }
  }
  return -1
}
